package main

import (
	"fmt"
)

type Student struct {
	Name  string
	Age   int
	Score int
}

func (stu *Student) ShowInfo() {
	fmt.Printf("学生名=%v 年龄=%v 成绩=%v\n",
		stu.Name, stu.Age, stu.Score)
}

func (stu *Student) SetScore(score int) {
	//业务判断
	stu.Score = score
}

type Pupil struct {
	Student //嵌入了 Student 匿名结构体
}

func (p *Pupil) testing() {
	fmt.Println("小学生正在考试中.... ")
}

//大学生
type Graduate struct {
	Student //嵌入了 Student 匿名结构体
}

//显示他的成绩
//这时 Graduate 结构体特有的方法，保留
func (p *Graduate) testing() {
	fmt.Println("大学生正在考试中..")
}

func main() {

	//当我们对结构体嵌入了匿名结构体使用方法会发生变化
	pupil := &Pupil{}
	pupil.Student.Name = "tom~"
	pupil.Student.Age = 8
	pupil.testing()
	pupil.Student.SetScore(70)
	pupil.Student.ShowInfo()

	pupil2 := &Graduate{}
	pupil2.Student.Name = "tom~"
	pupil2.Student.Age = 8
	pupil2.testing()
	pupil2.Student.SetScore(70)
	pupil2.Student.ShowInfo()

}
